--[[将数字转化为对应的UTF文字并且输出
	tNum 数值数组 
	每个数值的大小不能超过一字节
]]
local function printUTFStrUseNum(tNum)
	local str = ""

	for i = 1, #tNum do
		str = str .. string.char(tNum[i])
	end

	print(str)
	print("\233\165\149")
end
-- printUTFStrUseNum({233, 165, 149, 72})


--[[编码转化为可显示的字面值
	将类似于\233\232\322 这样显示的数字转化为可以显示的字面文字
	原理是截取数字，使用string.char进行格式转化
]]
function changeNumToUTFText(str)
	local str1 = string.gsub(str, "(\\)(%d%d%d)", function(s1, s2)
		return string.char(tonumber(s2))
	end)
	print(str1)
	return str1
end
-- changeNumToUTFText("你好啊啊啊133 222\233\165\149\72")

--[[获取utf-8字符长度
	任何字符都算作一个字符
	\192 \193 暂时不考虑
	\128-\191是除了第一位的标识头以外可能出现的字符集
]]
local function getWordCount(str)
	local count = 0
	for k in string.gmatch(str, "[^\128-\191]") do
		count = count + 1
	end
	print("wordCount", count)
	return count
end
-- getWordCount("电风扇Δδꦈあアew")

--[[将utf-8文字切割入表中
	utf的头部范围在[\1-\127\224-\253] 第二位开始范围[\128-\191]
	 使用*做最长匹配
]]
local function getSplitUtf8Word(str)
	local t = {}
	if type(str) ~= "string" then
		print("getSplitUtf8Word error, param is not a string")
		return t
	end
	for word in string.gmatch(str, "[\1-\127\224-\253][\128-\191]*") do
		t[#t + 1] = word
		print(word)
	end
	return t
end
-- getSplitUtf8Word("电风扇Δδꦈあアew")

-------------------------------------------
--[[除了英文按照两位切割
	（此切割对于编码大于3字节的会出现问题）
	191是除首位以外的字符位的最大值（ascii也小于191）
	对于英文 k = k + 1
	对于中文，如果是首位 则 k = k + 2，到中文的最后一位，
	中文最后一位必定 <= 191， 保证了中文必定是两位
--]]
function wlen(s)
	local len, k = 0, 1
	while k <= #s do
		len = len + 1
		if string.byte(s, k) <= 191 then
			k = k + 1
		else
			k = k + 2
		end
	end
	print(len)
	return len
end
wlen("电风扇Δδꦈあ萨达萨达アew")

--[[除了英文按照两位切割
	
]]
function wlen1(s)
	local len, k = 0, 1

	while k <= #s do
		if string.byte(s, k) <= 127 then
			k = k + 1
			len = len + 1
		else
			k = k + 3
			len = len + 2
		end
	end

	print(len)
	return len
end
wlen1("电风扇Δδꦈあ萨达萨达アew")
-------------------------------------------
